package _13线程同步的集合容器;

import java.util.*;

public class TestDemo {

	public static void main(String[] args) throws InterruptedException
	{
		
		// ArrayList 线程非安全的
		// Vector 线程安全的类 里面的方法是 synchronized 的方法
		
		
		// 结论: 在多线程程序中使用容器，
		// 方式1:要使用线程线程安全的类
		// 方式2: 自己在操作容器的代码外面加同步代码块
		// 方式3: Collections.synchronizedList() 转化为线程线程安全的
		
		// 线程非安全的容器	    线程安全的容器
		// ArrayList	 -> Vecotr
		// HashSet       -> CopyOnWriteSet
		// HashMap		 -> HashTable
		// StringBuilder -> StringBuffer
		
	
//		ArrayList<Integer> list = new ArrayList<>();
		
		// 方式1
//		Vector<Integer> list = new Vector<>();
		
		// 方式3
		List<Integer> list = Collections.synchronizedList(new ArrayList<>());
		
		for(int i=0;i<100;i++)
		{
			new Thread(new Runnable() {
				
				@Override
				public void run() {
					
					for(int j=0;j<100;j++)
					{
						// 方式2:
//						synchronized(list)
//						{
							list.add(1);
//						}
					}
				}
			}).start();
		}
		
		// 100*100 = 10000 个
		
		Thread.sleep(3000);
		System.out.println(list.size());
		
		// 9469
		// 9769
		
		// 使用Vector，容量不会少掉
		// 10000
	}

}
